这是 Go 系列的第二篇文章,主要介绍 if/else , switch 和函数的各种用法。

系列整理:

如果对 Go 语言本身感兴趣,可以阅读我的这篇译文 Go语言的优点,缺点和令人厌恶的设计

if/else

// 声明可以先于条件,if 中的声明的变量只在此 if/else 有效
if num := 9; num < 0 {
    
} else if num < 10 {
    
} else {
    
}

switch

// 普通 switch
switch time.Now().Weekday() {
    // 可以用逗号写多个值
    case time.Saturday, time.Sunday:
        fmt.Println("It's the weekend")
    default:
        fmt.Println("It's the weekday")
}


// 无表达式额的 switch
switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
}

// 比较类型
whatAmI := func(i interface{}) {
    switch t := i.(type) {
        case bool:
            fmt.Println("I'm a bool")
        case int:
            fmt.Println("I'm a int")
        default:
            fmt.Printf("Don't know type %T\n", t)    
    }
}

whatAmI(true)
whatAmI(1)
whatAmI("hey")

循环

// 经典的循环
for n := 0; n <= 5; n++ {
    if n % 2 == 0 {
        continue
    }
    fmt.Println(n)
}

// 只有条件
for i <= 3 {
    fmt.Println(i)
    i = i + 1 
}

// 死循环
for {
    fmt.Println("loop")
    break
}

实际测试

将整数转换为二进制表示

func convertToBin(v int) string {
    result := ""
    for ; v > 0; v /= 2 {
        result = strconv.Itoa(v % 2) + result
    }
    
    return result
}

函数

// 闭包函数
func apply(op func(int, int) int, a, b int) int {
    return op(a, b)
}

func main() {
    result := apply(func(i int, i2 int) int {
        return int(math.Pow(float64(i), float64(i2)))
    }, 2, 2)

    fmt.Println(result)
}

// 可变参数
func sum(num ... int) int {
    var result = 0
    for _, v := range num {
        result = result + v
    }
    return result
}

c := sum(1, 2, 3)

fmt.Println(c)

Donne
694 声望25 粉丝

知其然,知其所以然。